// lists 为 {list: res,key: 'key', parentKey: 'parentId', nameKey: 'menuName'}结构的数组, 这些字段是根据数据库字段而来
export function geneTreeData(lists) {
  // step1：格式化数据为树结构所需格式，并将多表数据组合
  let treeData = []
  for (const i of lists) {
    const list = []
    for (const j of i.list) {
      list.push(formatTreeNodeData(j, i.key, i.parentKey, i.nameKey))
    }
    treeData = treeData.concat(list)
  }
  // step2: 找到根节点
  // 找到根节点为起点,该节点前端和后台共同约束
  const root = treeData.find(a => a.parentId === 'root')
  if (!root) {
    alert('树结构未找到根节点')
    return
  }
  // 组装树结构
  addChildren(root, treeData)
  return [root]
}
// 格式化树结构数据是根据使用的树结构api来的
export function formatTreeNodeData(data, key, parentKey, nameKey) {
  if (key === undefined || parentKey === undefined) {
    console.warn('部分数据未提供关联关系key, parentKey，无法添加到树结构中')
  }

  const treeData = Object.assign({}, data)
  // parentId,key必须，非api使用，用于格式化数据的层级关系
  treeData['key'] = key === undefined ? data.id : data[key]
  treeData['parentId'] = parentKey === undefined ? null : data[parentKey]
  treeData['label'] = nameKey === undefined ? data.menuName : data[nameKey]
  treeData['children'] = []
  return treeData
}
export function addChildren(parentNode, list) {
  parentNode.children = list
    .filter(data => data.parentId === parentNode.key)
    // .sort((a, b) => {
    //   return a.sortCode - b.sortCode
    // })
  if (parentNode.children.length === 0) {
    parentNode.children = null
  } else {
    for (const i of parentNode.children) {
      addChildren(i, list)
    }
  }
}

